/**
  * Author: Mei
  * Date: 2020-12-25 9:36
  * Description: 互斥量的使用
  * 是一种同步原语，是一种线程同步的手段，用来保护多线程同时访问的共享数据
  * 有4种语义的互斥量
  * mutex: 独占的互斥量，不能递归使用
  * timed_mutex: 带超时的独占互斥量，不能递归使用
  * recursive_mutex: 递归互斥量，不带超时功能
  * recursive_timed_mutex: 带超时的递归互斥量
  *
  */
#include "head.h"

using namespace std;
/**
 * lock和unlock必须成对出现 lock会阻塞  不想阻塞可以使用try_lock()
 */
mutex g_lock;

void func() {
    g_lock.lock(); //不同步的话输出比较乱
    cout << "entered thread "<<this_thread::get_id() << endl;
    this_thread::sleep_for(chrono::seconds(1));
    cout << "leaving thread "<<this_thread::get_id() << endl;
    g_lock.unlock();
}
int main() {
    //1、独占互斥量
    thread t1(func);
    thread t2(func);
    thread t3(func);

    t1.join();
    t2.join();
    t3.join();
    return 0;
}